package nio.demo;

import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;

/**
 * @Desc:   数据通道间拷贝的案例
 *          在 Java NIO 中，如果两个通道中有一个是 FileChannel，那就可以直接将数据从一个 Channel 中传输到另外一个 Channel
 *          注意：在 SocketChannel 实现中，SocketChannel 只会传输此刻转备好的数据（可能不足count），
 *          因此，SocketChannel 可能不会将请求的所有数据（count）字节全部传输到 FileChannel 中
 * @author: cww
 * @DateTime: 2020-02-03 9:12
 */

public class ChannelTransferDemo {
    public static void main(String[] args) throws Exception {
        RandomAccessFile fromFile = new RandomAccessFile("src\\maindemo\\resources\\file\\nio\\transferFrom-data.txt", "rw");
        FileChannel fromChannel = fromFile.getChannel();

        RandomAccessFile toFile = new RandomAccessFile("src\\maindemo\\resources\\file\\nio\\transferTo-data.txt", "rw");
        FileChannel toChannel = toFile.getChannel();

        long position = 0;
        long count = fromChannel.size();

        toChannel.transferFrom(fromChannel, position, count);
//        fromChannel.transferFrom(toChannel, position, count);
    }
}
